package com.perpus;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

public class Perpustakaan {

    public static String NAMA = "Perpustakaan Kota";
    public static ArrayList<Publikasi> DAFTAR_PUBLIKASI = new ArrayList<Publikasi>();
    public static ArrayList<Anggota> DAFTAR_ANGGOTA = new ArrayList<Anggota>();
    public static ArrayList<Pinjaman> DAFTAR_PINJAMAN = new ArrayList<Pinjaman>();

    public static void tambahPublikasi(Publikasi publikasi) {
        DAFTAR_PUBLIKASI.add(publikasi);
    }

    public static void tambahAnggota(Anggota anggota) {
        DAFTAR_ANGGOTA.add(anggota);
    }

    public static void tambahPinjaman(Pinjaman pinjaman) {
        DAFTAR_PINJAMAN.add(pinjaman);
    }

    public static String bacaDaftarPublikasi() {
        if (DAFTAR_PUBLIKASI.isEmpty() == false) {
            String hasil = new String();
            for (int i = 0; i < 10; i++) {
                if (i < DAFTAR_PUBLIKASI.size()) {
                    hasil += "Judul        : " + DAFTAR_PUBLIKASI.get(i).getJudul() + "\n";
                    hasil += "ID Koleksi   : " + DAFTAR_PUBLIKASI.get(i).getIdKoleksi() + "\n";
                    hasil += "Penerbit     : " + DAFTAR_PUBLIKASI.get(i).getPenerbit() + "\n";
                    hasil += "Penulis   `  : " + DAFTAR_PUBLIKASI.get(i).getPenulis() + "\n";
                    hasil += "Tahun        : " + DAFTAR_PUBLIKASI.get(i).getTahun() + "\n\n";
                } else {
                    return hasil;
                }
            }
        }
        return "kosong";
    }

    public static String bacaDaftarAnggota() {
        if (DAFTAR_ANGGOTA.isEmpty() == false) {
            String hasil = new String();
            for (int i = 0; i < 10; i++) {
                if (i < DAFTAR_ANGGOTA.size()) {
                    hasil += "Nama      : " + DAFTAR_ANGGOTA.get(i).getNama() + "\n";
                    hasil += "ID Anggota: " + DAFTAR_ANGGOTA.get(i).getIdAnggota() + "\n";
                } else {
                    return hasil;
                }
            }
        }
        return "kosong";
    }

    public static String bacaDaftarPinjaman() {
        if (DAFTAR_PINJAMAN.isEmpty() == false) {
            String hasil = new String();
            for (int i = 0; i < 10; i++) {
                if (i < DAFTAR_PINJAMAN.size()) {
                    hasil += "Nama           : " + DAFTAR_PINJAMAN.get(i).getPeminjam().getNama() + "\n";
                    hasil += "ID Anggota     : " + DAFTAR_PINJAMAN.get(i).getPeminjam().getIdAnggota() + "\n";
                    hasil += "Judul          : " + DAFTAR_PINJAMAN.get(i).getPublikasi().getJudul() + "\n";
                    hasil += "ID Koleksi     : " + DAFTAR_PINJAMAN.get(i).getPublikasi().getIdKoleksi() + "\n";
                    hasil += "Penerbit       : " + DAFTAR_PINJAMAN.get(i).getPublikasi().getPenerbit() + "\n";
                    hasil += "Penulis        : " + DAFTAR_PINJAMAN.get(i).getPublikasi().getPenulis() + "\n";
                    hasil += "Tanggal Pinjam : " + DAFTAR_PINJAMAN.get(i).getTanggalPinjam().getDate() + "\n";
                    hasil += "Tanggal Kembali: " + DAFTAR_PINJAMAN.get(i).getTanggalKembali().getDate() + "\n";
                    hasil += "Denda          : " + DAFTAR_PINJAMAN.get(i).getPublikasi().hitungDenda(10) + "\n";
                } else {
                    return hasil;
                }
            }
        }
        return "kosong";
    }

    public static void simpanFilePublikasi() {
        FileOutputStream outStream = null;
        if (DAFTAR_PUBLIKASI.isEmpty()) {
            JOptionPane.showMessageDialog(null, "Daftar Publikasi Kosong");
        } else {
            File outFile = new File("Publikasi.dat");
            try {
                outStream = new FileOutputStream(outFile);
            } catch (FileNotFoundException ex) {
                Logger.getLogger(Perpustakaan.class.getName()).log(Level.SEVERE, null, ex);
            }
            ObjectOutputStream outObjectStream = null;
            try {
                outObjectStream = new ObjectOutputStream(outStream);
            } catch (IOException ex) {
                Logger.getLogger(Perpustakaan.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                outObjectStream.writeObject(DAFTAR_PUBLIKASI);
            } catch (IOException ex) {
                Logger.getLogger(Perpustakaan.class.getName()).log(Level.SEVERE, null, ex);
            }
            try {
                outStream.close();
            } catch (IOException ex) {
                Logger.getLogger(Perpustakaan.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    public static void bacaFilePublikasi() {
        ObjectInputStream inObjectStream = null;
        try {
            FileInputStream inStream = null;
            File inFile = new File("Publikasi.dat");
            try {
                inStream = new FileInputStream(inFile);
            } catch (FileNotFoundException ex) {
                Logger.getLogger(Perpustakaan.class.getName()).log(Level.SEVERE, null, ex);
            }
            inObjectStream = new ObjectInputStream(inStream);
        } catch (IOException ex) {
            Logger.getLogger(Perpustakaan.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                inObjectStream.close();
            } catch (IOException ex) {
                Logger.getLogger(Perpustakaan.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        try {
            DAFTAR_PUBLIKASI = (ArrayList<Publikasi>)inObjectStream.readObject();
        } catch (IOException ex) {
            Logger.getLogger(Perpustakaan.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(Perpustakaan.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
